package com.juzipi.inter.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.juzipi.inter.bo.UserBo;
import com.juzipi.inter.pojo.User;
import com.juzipi.inter.vo.UserRoleVo;
import org.apache.ibatis.annotations.Param;

public interface UserMapper extends BaseMapper<User> {

    /**
     * 无条件的查询 返回分页
     * @param page 分页
     * @return UserRoleVo
     */
//    @Select("SELECT u.id,u.username,u.nickname,u.last_login_time,u.gender,u.email,u.phone_number,u.non_disable,u.role_id,r.role_name FROM user u LEFT JOIN role r on r.id = u.role_id WHERE deleted = 0")
    Page<UserRoleVo> queryUserAndRoleByPage(Page<?> page);

    /**
     * 根据用户名模糊查询 返回分页
     * @param page 分页
     * @param key 模糊查询字段
     * @param orderBy 排序字段
     * @return UserRoleVo
     */
//    @Select("SELECT u.id,u.username,u.nickname,u.last_login_time,u.gender,u.email,u.phone_number,u.non_disable,u.role_id,r.role_name FROM user u LEFT JOIN role r on r.id = u.role_id WHERE (u.username like \"%\" #{key} \"%\" AND deleted = 0) ORDER BY #{orderBy}")
    Page<UserRoleVo> queryUserAndRoleByLike(Page<?> page, @Param("key") String key, @Param("orderBy") String orderBy);

    /**
     * 查询某一个角色下的所有用户信息
     * @param page 分页
     * @param key 模糊查询字段
     * @return userBo
     */
//    @Select("SELECT u.id,u.username,u.nickname,u.gender,u.email,u.phone_number,u.last_login_time FROM user LEFT JOIN role r on r.id = user.role_id WHERE r.role_code = #{roleCode} AND deleted = 0")
    Page<UserBo> queryUserBySort(Page<?> page,@Param("key") String key);


    /**
     * 根据id查询用户部分信息
     * @param userId 用户id
     * @return UserBo对象
     */
//    @Select("SELECT u.id,u.nickname,u.username,u.password,u.gender,u.email,u.phone_number,u.last_login_time,u.create_by,u.update_by FROM user u WHERE u.id = #{userId} AND deleted = 0")
    UserBo queryUserById(Long userId);


    /**
     * 修改密码，适用于找回密码时
     * @param username 用户名
     * @param emailCode 发送到邮箱的验证码
     * @return 数据库受影响行数
     */
//    @Update("UPDATE user u SET u.password = #{emailCode} WHERE u.username = #{username}")
    Integer modifyPasswordByUsername(@Param("username") String username,@Param("emailCode") String emailCode);
}
